package com.mazaiting.redeye.utils

import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.graphics.BitmapFactory
import android.graphics.Color
import android.os.Build
import androidx.core.app.NotificationCompat
import com.mazaiting.redeye.R

/***
 *
 *
 *                                                    __----~~~~~~~~~~~------___
 *                                   .  .   ~~//====......          __--~ ~~
 *                   -.            \_|//     |||\\  ~~~~~~::::... /~
 *                ___-==_       _-~o~  \/    |||  \\            _/~~-
 *        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 *    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 *  .~       .~       |   \\ -_    /  /-   /   ||      \   /
 * /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 * |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 *          '         ~-|      /|    |-~\~~       __--~~
 *                      |-~~-_/ |    |   ~\_   _-~            /\
 *                           /  \     \__   \/~                \__
 *                       _--~ _/ | .-~~____--~-/                  ~~==.
 *                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
 *                                 -_     ~\      ~~---l__i__i__i--~~_/
 *                                 _-~-__   ~)  \--______________--~~
 *                               //.-~~~-~_--~- |-------~~~~~~~~
 *                                      //.-~~~--\
 *                               神兽保佑
 *                              代码无BUG!
 * @author mazaiting
 * @date 2019-07-31
 * @description 通知管理工具类
 */
object NotificationUtil {

    /**
     * 发送通知
     * @param context 上下文
     * @param id 通知 ID, 可用当前时间
     * @param contentTitle 内容标题
     * @param contentText 内容文本
     * @param tickerText 通知首次出现通知
     * @param intent 意图
     */
    fun sendNotification(context: Context, id: Int, contentTitle: String, contentText: String = "", tickerText: String = "", intent: PendingIntent? = null) {
        // 获取工具管理者
        val notificationManager: NotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            // 创建通道
            val channel = NotificationChannel("1", "default", NotificationManager.IMPORTANCE_DEFAULT)
            // 是否在桌面icon右上角展示小红点 
            channel.enableLights(true)
            // 小红点颜色
            channel.lightColor = Color.RED
            //是否在久按桌面图标时显示此渠道的通知 
            channel.setShowBadge(true)
            // 创建通道
            notificationManager.createNotificationChannel(channel)
        }
        val build: NotificationCompat.Builder = NotificationCompat.Builder(context, "default")
        // 设置通知栏标题
        build.setContentTitle(contentTitle)
        // 设置通知栏显示内容
        build.setContentText(contentText)
        // 设置通知集合的数量
        //build.setNumber(3);        
        // 通知首次出现在通知栏，带上升动画效果的
        build.setTicker(tickerText)
        // 通知产生的时间，会在通知信息里显示，一般是系统获取到的时间
        build.setWhen(System.currentTimeMillis())
        // 设置该通知优先级
        build.priority = Notification.PRIORITY_DEFAULT
        // 设置这个标志当用户单击面板就可以让通知将自动取消
        build.setAutoCancel(true)
        // true，设置他为一个正在进行的通知,通常是用来表示一个后台任务,以某种方式正在等待,如一个文件下载,同步操作
        build.setOngoing(false)
        // 向通知添加声音、闪灯和振动效果
        build.setDefaults(Notification.DEFAULT_VIBRATE)
        // 设置通知小ICON
        build.setSmallIcon(R.mipmap.ic_launcher)
        // 设置大图标
        build.setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))
        // 设置通知栏点击意图
        build.setContentIntent(intent)
        // 构建通知
        val notification: Notification = build.build()
        // 发送通知
        notificationManager.notify(id, notification)
    }

    /**
     * 获取延时意图
     * @param context 上下文
     * @param intent 意图
     * @return 延时意图
     */
    fun getContentIntent(context: Context, intent: Intent): PendingIntent {
        return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
    }
}